9001. Большое произведение

 

Жюри решило дать вам сложную задачу. Даны числа a и b, требуется найти следующее произведение чисел a * (a + 1) * ... * b.

Далее подумав, что задача будет слишком скучной, вместо значения произведения, жюри решило спросить у вас знак произведения. Так что, вам нужно найти является ли это произведение положительным, отрицательным или нулем.

 

Вход. Два целых числа a и b (-109 ≤ a ≤ b ≤ 109).

 

Выход. Выведите знак произведения a * (a + 1) * ... * b – одно из следующих чисел , -1, 0, 1 соответственно.

 

Пример входа 1

Пример выхода 1

3 5

1

 

 

Пример входа 2

Пример выхода 2

-6 5

0

 

 

Пример входа 3

Пример выхода 3

-7 -1

-1

 

 

РЕШЕНИЕ

условный оператор

 

Анализ алгоритма

В решении будем исходить из того, что a ≤ b.

Если a > 0, то произведение чисел будет положительным, выводим 1.

Если a < 0 и b > 0, то среди множителей имеется 0, поэтому произведение чисел равно 0, выводим 0.

Если b < 0, то все множители отрицательны. Знак произведения определяется количеством отрицательных множителей. Если число множителей четно (a и b имеют разную четность), то ответ 1. Иначе ответ -1.

 

Пример

В третьем примере произведение имеет вид:

(-7) * (-6) * (-5) * (-4) * (-3) * (-2) * (-1)

Произведение содержит 7 отрицательных множителей. Числа a = -7 и b = -1 имеют одинаковую четность. Следовательно произведение отрицательно.

 

Реализация алгоритма

Читаем входные данные.

 

scanf("%d %d", &a, &b);

 

Если все множители положительны, то ответ 1.

 

if (a > 0) res = 1;

 

Если среди множителей есть 0, то ответ 0.

 

else if (a <= 0 && b >= 0) res = 0;

else

{

 

Если все множители отрицательны, то ответ определяется количеством множителей. Если число множителей четно (a и b имеют разную четность), то ответ 1. Иначе ответ -1.

 

  if ((b - a) % 2 == 0) res = -1;

  else res = 1;

}

 

Выводим ответ.

 

printf("%d\n", res);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int a = con.nextInt();

    int b = con.nextInt();

    int res;

    if (a > 0) res = 1;

    else if (a <= 0 && b >= 0) res = 0;

    else

    {

      if ((b - a) % 2 == 0) res = -1;

      else res = 1;

    }

   

    System.out.println(res);

    con.close();

  }

}

 

Python реализация

 

a, b = map(int,input().split())

if a > 0: res = 1

elif a <= 0 and b >= 0: res = 0

else:

  if (b - a) % 2 == 0: res = -1

  else: res = 1

 

print(res)